/*
* 1.创建一个空对象
* 2.链接到原型
* 3.绑定this值
* 4.返回新对象
*/
// 第一种实现
function createNew() {
    let obj = {}  // 1.创建一个空对象
    // 每个函数都有一个Arguments对象实例arguments,引用了函数的实参，可通过数组下标的方式引用arguments的元素
    let constructor = [].__proto__.shift.call(arguments)
    // let [constructor,...args] = [...arguments]
    obj.__proto__ = constructor.prototype  // 2.链接到原型

    let result = constructor.apply(obj, arguments)  // 3.绑定this值
    // let result = constructor.apply(obj, args)

    return typeof result === 'object' ? result : obj  // 4.返回新对象
}

function People(name,age) {
    this.name = name
    this.age = age
}

// 第一个参数是 类的 构造器函数；之后的参数为属性值
let people = createNew(People,'Bob',22)
console.log(people.name)
console.log(people.age)


